import json
import os
import sys

# Tesseract配置
TESSERACT_PATH = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# API配置
DEEPSEEK_API_URL = 'https://api.deepseek.com/v1/chat/completions'
BAIDU_API_URL = 'https://fanyi-api.baidu.com/api/trans/vip/translate'

# 默认配置
DEFAULT_CONFIG = {
    'selected_api': 'deepseek',
    'selected_ocr': 'local',  # 添加OCR服务选择
    'deepseek': {
        'api_key': '',
        'api_url': DEEPSEEK_API_URL,
        'prompt': '''你是一个专业的翻译引擎，请将文本翻译成自然的中文。要求：
        1. 准确理解原文含义
        2. 保持语言风格一致
        3. 适当处理网络用语和二次元术语
        4. 只返回翻译结果，不要加任何说明'''
    },
    'baidu': {
        'app_id': '',
        'app_key': '',
        'api_url': BAIDU_API_URL
    },
    'tencent': {
        'secret_id': '',
        'secret_key': '',
        'api_url': 'https://tmt.tencentcloudapi.com'
    },
    'aliyun': {
        'access_key': '',
        'access_secret': '',
        'api_url': 'https://mt.aliyuncs.com'
    },
    # 添加OCR服务配置
    'ocr_services': {
        'tencent': {
            'secret_id': '',
            'secret_key': '',
            'api_url': 'https://ocr.tencentcloudapi.com'
        },
        'baidu': {
            'app_id': '',
            'app_key': '',
            'api_url': 'https://aip.baidubce.com/rest/2.0/ocr/v1'
        }
    }
}

def get_config_dir():
    """获取配置文件目录"""
    if getattr(sys, 'frozen', False):
        # 如果是打包后的应用，使用用户目录
        config_dir = os.path.join(os.path.expanduser('~'), '.subtitle_translator')
    else:
        # 如果是开发环境，使用项目目录
        config_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    # 确保配置目录存在
    os.makedirs(config_dir, exist_ok=True)
    return config_dir

def load_config():
    """加载配置文件"""
    try:
        config_path = os.path.join(get_config_dir(), 'config.json')
        print(f"尝试加载配置文件: {config_path}")
        
        if os.path.exists(config_path):
            with open(config_path, 'r', encoding='utf-8') as f:
                config = json.load(f)
                print(f"成功加载配置文件: {config_path}")
                # 确保所有API配置都存在
                for api in ['deepseek', 'baidu', 'tencent', 'aliyun']:
                    if api not in config:
                        config[api] = DEFAULT_CONFIG[api]
                # 确保OCR服务配置存在
                if 'ocr_services' not in config:
                    config['ocr_services'] = DEFAULT_CONFIG['ocr_services']
                if 'selected_ocr' not in config:
                    config['selected_ocr'] = DEFAULT_CONFIG['selected_ocr']
                return config
        else:
            # 创建默认配置文件
            print(f"配置文件不存在，创建默认配置: {config_path}")
            with open(config_path, 'w', encoding='utf-8') as f:
                json.dump(DEFAULT_CONFIG, f, ensure_ascii=False, indent=4)
            return DEFAULT_CONFIG
    except Exception as e:
        print(f"加载配置文件失败: {str(e)}")
        return DEFAULT_CONFIG

def save_config(config):
    """保存配置文件"""
    try:
        config_path = os.path.join(get_config_dir(), 'config.json')
        print(f"尝试保存配置文件: {config_path}")
        
        # 确保所有API配置都存在
        for api in ['deepseek', 'baidu', 'tencent', 'aliyun']:
            if api not in config:
                config[api] = DEFAULT_CONFIG[api]
        
        # 确保OCR服务配置存在
        if 'ocr_services' not in config:
            config['ocr_services'] = DEFAULT_CONFIG['ocr_services']
        if 'selected_ocr' not in config:
            config['selected_ocr'] = DEFAULT_CONFIG['selected_ocr']
        
        # 确保配置目录存在
        os.makedirs(os.path.dirname(config_path), exist_ok=True)
        
        with open(config_path, 'w', encoding='utf-8') as f:
            json.dump(config, f, ensure_ascii=False, indent=4)
        print(f"配置文件保存成功: {config_path}")
        
        # 验证配置文件是否成功保存
        if os.path.exists(config_path):
            with open(config_path, 'r', encoding='utf-8') as f:
                saved_config = json.load(f)
                print(f"验证配置文件内容: {saved_config}")
        else:
            print(f"警告：配置文件保存后未找到: {config_path}")
            
    except Exception as e:
        print(f"保存配置文件失败: {str(e)}")
        raise e

def check_language_packs():
    """检查Tesseract语言包是否可用"""
    tessdata_path = os.path.join(os.path.dirname(TESSERACT_PATH), 'tessdata')
    missing_packs = []
    
    # 检查英语语言包
    eng_path = os.path.join(tessdata_path, 'eng.traineddata')
    if not os.path.exists(eng_path):
        missing_packs.append(('英语', 'eng.traineddata'))
        
    # 检查日语语言包
    jpn_path = os.path.join(tessdata_path, 'jpn.traineddata')
    if not os.path.exists(jpn_path):
        missing_packs.append(('日语', 'jpn.traineddata'))
        
    return missing_packs 